// 1.4 引入用户相关的Model处理函数
let userModel = require('../model/userModel');
// 1.12 引入md5加密的盐
const SALTOBJ = require('../config');

// 1.11 引入blueimp-md5用于md5加密
let md5 = require('blueimp-md5');

// 1.3 定义提交注册新用户的controller函数
module.exports = {
  handlePostUser: (req, res) => {
    let newuser = req.body
    // 1.4 引入用户相关的Model处理函数

    // 1.10在正式添加新用户之前，先得去数据库查找是否存在当前你正在注册的username，就得调用model中查找用户的方法
    userModel.getUserByName(newuser.username, (err, data) => {
        // 这是数据库错误
        if (err) return res.json({ status: 0, msg: '查询数据库出错！' })
        // 这是查询到有数据，说明这个用户已存在，要返回错误提示信息
        if (data.length !== 0) return res.json({ status: 0, msg: '用户名已存在，请换一个！' })
        // 1.11 在将新用户存入数据库之前，先对其密码进行md5加密, 单纯md5加密还是不太安全，为了提高安全性，我们需要md5加盐
        newuser.password = md5(newuser.password, SALTOBJ.SALT)
        // 当没有错误之后，才能够去往数据库中添加数据
    userModel.addNewUser(newuser, (err, data) => {
        // 1.7 根据model中的查询结果，开始判断
        // 如果出错，就给前台返回一个段错误信息
        // 如果正确，就返回一段正确信息给前台
        if (err) return res.json({ status: 0, msg: '操作数据库出错！' })
        if (data.affectedRows !== 0) {
          res.json({ status: 1, msg: '注册成功！' })
        }
      })
    })

  },
  // 2.2 处理登录
  handleLogin: (req, res) => {
    let userobj = req.body
    userobj.password = md5(userobj.password, SALTOBJ.SALT)
    // 2.3 利用model查询数据库
    userModel.checkLogin(userobj, (err, data) => {
      if (err) return res.json({ status: 0, msg: '查询数据库出错！' })
      // 如果查询的数据长度为0， 就说明没有找到该用户，要么没注册，要么用户名密码错误
      if (data.length === 0) return res.json({ status: 0, msg: '该用户未注册或者用户名密码错误！' })
      // 3.2 登录成功以后，我们需要用session保存用户的登录状态
      req.session.isLogin = true
      // 3.4 除了登录状态以外，还应该把用户的信息传递保存起来
      req.session.user = data[0]
      res.json({ status: 1, msg: '登录成功！' })
    })
  },
  // 4.1 定义退出登录的controller函数
  handleLogout: (req, res) => {
    // 4.2 清掉session（通过req.session.destroy()方法清除session）， 返回首页
    req.session.destroy(function (err) {
      if (err) throw err
      // 返回首页直接通过res.redirect()这个方法实现，该方法参数中传一个路径就阔以了
      res.redirect('/')
    })
  }
};
